﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.LightSwitch;
namespace LightSwitchApplication
{
    public enum TipoDocumento : int
    {
        OrdineCliente,
        PreventivoCliente,
        OrdiniFornitoreMateriale
    }

    public partial class Documento
    {
        partial void TotaleDocumento_Compute(ref decimal result)
        {
            foreach (var d in DettagliDocumento)
            {
                result += d.Quantità * d.PrezzoUnitario;
            }
        }

        partial void TotaleMateriale_Compute(ref decimal result)
        {
            foreach (var d in DettagliDocumento)
            {
                var articolo = d.Articolo;

                // Se materiale è in conto lavoro salto voce.
                if (d.MaterialeInContoLavoro || articolo == null) continue;

                foreach (var dm in d.Articolo.DettagliMaterialeArticolo)
                {
                    result += dm.PrezzoCad * d.Quantità;
                }
            }

        }

        partial void TotaleCostiVari_Compute(ref decimal result)
        {
            foreach (var d in DettagliDocumento)
            {
                var articolo = d.Articolo;

                // Se materiale è in conto lavoro salto voce.
                if (articolo == null) continue;

                foreach (var dm in articolo.DettagliCostiGenerici)
                {
                    if (dm.TipologiaImporto == 0) // per lotto
                        result += dm.Importo;

                    else if (dm.TipologiaImporto == 1) // per pezzo
                        result += dm.Importo * d.Quantità;
                }
            }

        }

        partial void TotaleCostoLavorazioni_Compute(ref decimal result)
        {
            foreach (var d in DettagliDocumento)
            {
                foreach (var dm in d.DettagliLavorazione)
                {
                    if (dm.Lavorazione == null) continue;

                    var totMinuti = (dm.Ore * 60) + dm.Minuti;

                    var costoMinuto = dm.Lavorazione.CostoOrario / 60;

                    var parziale = totMinuti * costoMinuto;

                    result += parziale;
                }
            }
        }

        partial void TotaleCosto_Compute(ref decimal result)
        {
            result = TotaleCostiVari + TotaleCostoLavorazioni + TotaleMateriale;
        }

        /// <summary>
        /// Totale Materiale Ordine.
        /// Todo: poi magari fare spese aggiuntivi tipo tagli.
        /// </summary>
        /// <param name="result"></param>
        partial void TotaleOrdineMateriale_Compute(ref decimal result)
        {
            foreach (var dm in DettagliDocumentoMateriale)
                result += dm.TotaleRiga;
        }
    }
}
